﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Framework.Entidade.Acesso;
using Framework.LogicaNegocio.Acesso;
using Framework.Util;
using Framework.Util.Enumerador;

namespace Web
{
    public partial class ListarGrupos : System.Web.UI.Page
    {
        #region Métodos

        private void ExibirMensagem(string mensagem, TipoMensagemEnum tipoMensagem)
        {
            ucMensagem.Mensagem = mensagem;
            ucMensagem.TipoMensagem = tipoMensagem;
            ucMensagem.ExibirMensagem();
        }

        private void IniciarTela()
        {
            try
            {
                ucCabecalho.TelaDestino = "~/Admin/Acesso/ListarGrupos.aspx";
                ucCabecalho.CarregarCabecalho();

                CarregarStatus();
                CarregarListView();
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        private void CarregarStatus()
        {
            try
            {
                Array lstValues = Enum.GetValues(typeof(StatusEnum));
                List<string> lstNames = Geral.GetDescriptions(typeof(StatusEnum));

                if (lstValues.Length == lstNames.Count)
                {
                    ListItem item;
                    for (int i = 0; i < lstValues.Length; i++)
                    {
                        item = new ListItem();
                        item.Text = lstNames[i];
                        item.Value = lstValues.GetValue(i).ToString();

                        rblStatus.Items.Add(item);
                    }

                    rblStatus.DataBind();
                    rblStatus.Items[0].Selected = true;
                }
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        private void CarregarListView()
        {
            ucMensagem.FecharMensagem();

            LN_Grupo ojGrupoLN = new LN_Grupo();

            try
            {
                ltvGrupo.DataSource = ojGrupoLN.Listar(txtNome.Text.Trim(), rblStatus.SelectedValue.ToString());
                ltvGrupo.DataBind();
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        private void SalvarGrupo(EN_Grupo objGrupo)
        {
            LN_Grupo ojGrupoLN = new LN_Grupo();

            try
            {
                ojGrupoLN.Salvar(objGrupo);
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        private void ExcluirGrupo(int id)
        {
            LN_Grupo ojGrupoLN = new LN_Grupo();

            try
            {
                ojGrupoLN.Excluir(id);
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        #endregion

        #region Eventos

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack == true) return;

            IniciarTela();
        }

        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            CarregarListView();
        }

        protected void btiConfigurar_Click(object sender, ImageClickEventArgs e)
        {
            ImageButton btiConfigurar = (ImageButton)sender;
            int idGrupo = 0;

            if (btiConfigurar != null)
                idGrupo = Convert.ToInt32(btiConfigurar.CommandArgument);

            Context.Items.Add("IdGrupo", idGrupo);
            Server.Transfer("~/Admin/Acesso/ConfigurarGrupo.aspx");
        }

        #region ListView ltvGrupo

        protected void ltvGrupo_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            try
            {
                Label lblStatus = e.Item.FindControl("lblStatus") as Label;
                Image imgStatus = e.Item.FindControl("imgStatus") as Image;
                RadioButtonList rblStatus = e.Item.FindControl("rblStatus") as RadioButtonList;

                if (imgStatus != null && lblStatus != null)
                {
                    //ItemTemplate
                    bool status = Convert.ToBoolean(lblStatus.Text);

                    if (status == true)
                    {
                        imgStatus.ImageUrl = "~/Images/iconAtivo.png";
                        imgStatus.ToolTip = "Ativo";
                    }
                    else
                    {
                        imgStatus.ImageUrl = "~/Images/iconInativo.png";
                        imgStatus.ToolTip = "Inativo";
                    }
                }
                else if (rblStatus != null && lblStatus != null)
                {
                    //EditItemTemplate
                    bool status = Convert.ToBoolean(lblStatus.Text);

                    if (status == true)
                    {
                        rblStatus.SelectedValue = "True";
                    }
                    else
                    {
                        rblStatus.SelectedValue = "False";
                    }
                }
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        protected void ltvGrupo_ItemCanceling(object sender, ListViewCancelEventArgs e)
        {
            ltvGrupo.EditIndex = -1;
            CarregarListView();
        }

        protected void ltvGrupo_ItemDeleting(object sender, ListViewDeleteEventArgs e)
        {
            try
            {
                int index = e.ItemIndex;
                int id = 0;

                ListViewDataItem li = (ListViewDataItem)ltvGrupo.Items[index];
                Label lblId = (Label)li.FindControl("lblId");

                if (lblId != null)
                    id = Convert.ToInt32(lblId.Text);

                ExcluirGrupo(id);
                CarregarListView();
                ExibirMensagem("Grupo excluído com sucesso.", TipoMensagemEnum.Sucesso);
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        protected void ltvGrupo_ItemInserting(object sender, ListViewInsertEventArgs e)
        {
            try
            {
                RadioButtonList rblStatus = ltvGrupo.InsertItem.FindControl("rblStatus") as RadioButtonList;
                Label lblId = ltvGrupo.InsertItem.FindControl("lblId") as Label;
                TextBox txtNome = ltvGrupo.InsertItem.FindControl("txtNome") as TextBox;
                TextBox txtDescricao = ltvGrupo.InsertItem.FindControl("txtDescricao") as TextBox;

                EN_Grupo objGrupo = new EN_Grupo();

                if (rblStatus != null && lblId != null && txtNome != null && txtDescricao != null)
                {
                    if (string.IsNullOrEmpty(txtNome.Text.Trim()) == true)
                        throw new Exception("Informe o Nome do Grupo.");
                    if (string.IsNullOrEmpty(txtDescricao.Text.Trim()) == true)
                        throw new Exception("Informe a Descrição do Grupo.");

                    objGrupo.Id = Convert.ToInt32(lblId.Text);
                    objGrupo.Nome = txtNome.Text.Trim();
                    objGrupo.Descricao = txtDescricao.Text.Trim();
                    objGrupo.Status = Convert.ToBoolean(rblStatus.SelectedValue);
                }

                SalvarGrupo(objGrupo);
                CarregarListView();
                ExibirMensagem("Grupo cadastrado com sucesso.", TipoMensagemEnum.Sucesso);
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        protected void ltvGrupo_ItemEditing(object sender, ListViewEditEventArgs e)
        {
            int index = e.NewEditIndex;
            ltvGrupo.EditIndex = index;
            CarregarListView();
        }

        protected void ltvGrupo_ItemUpdating(object sender, ListViewUpdateEventArgs e)
        {
            try
            {
                RadioButtonList rblStatus = ltvGrupo.EditItem.FindControl("rblStatus") as RadioButtonList;
                Label lblId = ltvGrupo.EditItem.FindControl("lblId") as Label;
                TextBox txtNome = ltvGrupo.EditItem.FindControl("txtNome") as TextBox;
                TextBox txtDescricao = ltvGrupo.EditItem.FindControl("txtDescricao") as TextBox;

                EN_Grupo objGrupo = new EN_Grupo();

                if (rblStatus != null && lblId != null && txtNome != null && txtDescricao != null)
                {
                    if (string.IsNullOrEmpty(txtNome.Text.Trim()) == true)
                        throw new Exception("Informe o Nome do Grupo.");
                    if (string.IsNullOrEmpty(txtDescricao.Text.Trim()) == true)
                        throw new Exception("Informe a Descrição do Grupo.");

                    objGrupo.Id = Convert.ToInt32(lblId.Text);
                    objGrupo.Nome = txtNome.Text.Trim();
                    objGrupo.Descricao = txtDescricao.Text.Trim();
                    objGrupo.Status = Convert.ToBoolean(rblStatus.SelectedValue);
                }

                SalvarGrupo(objGrupo);
                ltvGrupo.EditIndex = -1;
                CarregarListView();
                ExibirMensagem("Grupo alterado com sucesso.", TipoMensagemEnum.Sucesso);
            }
            catch (Exception ex)
            {
                ExibirMensagem(ex.Message, TipoMensagemEnum.Erro);
            }
        }

        #endregion

        #endregion
    }
}